home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / misc / emu / Apex-src.lha / SERHAN.68K < prev    next >
Text File  |  2001-09-30  |  6KB  |  194 lines

  1. ;SERHAN.68K    JAN-15-86    (ALSO SEE "INFOSTR")
  2. ;RS-232 HANDLER
  3. ;WRITTEN BY LOREN BLANEY
  4. ;
  5. ;REVISION HISTORY:
  6. ;
  7. ;NOTES:
  8. ;This uses serial port #2, 9600 baud, no handshake, 8 data bits, 1 stop
  9. ; bit, and no parity.
  10.  
  11.     NOLIST
  12.     INCLUDE    SYSPAG        ;GET THE SYSTEM PAGE DIFINITIONS
  13.     LIST
  14.  
  15. DEVNUM    EQU    4        ;INSTALL THIS HANDLER AS DEVICE # 4
  16.  
  17. ;68681 DUART REGISTER I/O ADDRESSES:
  18. URT0SRA    EQU    $FFC303        ;1 - STATUS REGISTER A FOR TERMINAL
  19. URTMRXA    EQU    $FFC340        ;0 - MODE REGISTER A
  20. URTSRA    EQU    $FFC343        ;1 - STATUS REGISTER A
  21. URTCSRA    EQU    $FFC343        ;1 - CLOCK-SELECT REGISTER
  22. URTCRA    EQU    $FFC345        ;2 - COMMAND REGISTER A
  23. URTDTA    EQU    $FFC347        ;3 - TRANSMIT/RECEIVE DATA REGISTER
  24. URTACR    EQU    $FFC349        ;4 - AUXILLARY CONTROL REGISTER
  25. URTIMR    EQU    $FFC34B        ;5 - INTERRUPT MASK REGISTER
  26. PPAR11    EQU    $FFC201        ;GENERAL OUTPUT PORT, LED RED +
  27.  
  28.     ORG    MEMTOP -$0700
  29. START    EQU    @        ;ADDRESS WHERE THIS HANDLER STARTS
  30.  
  31. ;=======================================================================
  32. ;ENTRY POINTS:
  33. ;
  34. SERHAN    DC.L    OPENI        ;$00 = OPENI
  35.     DC.L    OPENO        ;$04 = OPENO
  36.     DC.L    CHIN        ;$08 = CHIN
  37.     DC.L    CHOUT        ;$0C = CHOUT
  38.     DC.L    CLOSE        ;$10 = CLOSE
  39.     DC.L    GETINFO        ;$14 = GETINFO
  40.     DC.L    DUMMY        ;$18 = SPARE
  41.     DC.L    DUMMY        ;$1C = SPARE
  42.  
  43. ;-----------------------------------------------------------------------
  44. ;OPEN (INITIALIZE) THE RS-232 PORT
  45. ;
  46. OPENI    BSR    OPEN        ;INIT RS-232 PORT FOR I/O, SET BAUD RATE
  47.     BSR    FLUSH
  48. DUMMY    RTS
  49.  
  50. ;-----------------------------------------------------------------------
  51. ;OPEN (INITIALIZE) THE RS-232 PORT
  52. ;
  53. OPENO    BSR    OPEN        ;INIT RS-232 PORT FOR I/O, SET BAUD RATE
  54.     BSR    FLUSH
  55.     RTS
  56.  
  57. ;-----------------------------------------------------------------------
  58. ;GET A CHARACTER FROM THE RS-232 PORT AND RETURN IT IN D0.
  59. ;
  60. CHIN    BSR    BYTEIN
  61.     BEQ.S    CHIN        ;LOOP UNTIL A BYTE IS RECEIVED
  62.     RTS
  63.  
  64. ;-----------------------------------------------------------------------
  65. ;OUTPUT THE BYTE IN D0 TO THE RS-232 PORT
  66. ;
  67. CHOUT    BSR    BYTEOT
  68.     RTS
  69.  
  70. ;-----------------------------------------------------------------------
  71. ;CLOSE THE OUTPUT FILE
  72. ;
  73. CLOSE    RTS
  74.  
  75. ;-----------------------------------------------------------------------
  76. ;RETURN THE ADDRESS OF THE INFORMATION ARRAY IN D0
  77. ;
  78. GETINFO    MOVE.L    #INFO,D0
  79.     RTS
  80.  
  81. INFO    DC.L    START        ;START AND END ADDRESSES OF THIS HANDLER
  82.     DC.L    END
  83.     DC.L    INFOSTR        ;DESCRIPTION
  84. INFOSTR    ASCII    'SERHAN    JAN-15-86  RS-232 handle'
  85.     DC.B    'r'+$80
  86.  
  87. ;=======================================================================
  88. ;LOWEST LEVEL I/O ROUTINES:
  89. ;
  90. ;INITIALIZE THE RS-232 PORT (68681) FOR I/O
  91. ;
  92. OPEN    MOVE.L    A6,-(SP)    ;SAVE A6
  93.  
  94.     LEA    OPENTBL.L,A6    ;POINT TO INITIALIZATION TABLE
  95.     MOVE.B    (A6)+,URTIMR.L    ;DISABLE ALL INTERRUPTS
  96.     MOVE.B    (A6)+,URTCRA.L    ;RESET MR POINTER TO MR1
  97.     MOVE.B    (A6)+,URTMRXA.L    ;SET PARITY, BITS PER CHAR, ETC.
  98.     MOVE.B    (A6)+,URTMRXA.L    ;SET STOP BIT WIDTH
  99.     MOVE.B    (A6)+,URTACR.L    ;SELECT BAUD SET (1 OR 2) & TIMER SOURCE
  100.     MOVE.B    (A6)+,URTCSRA.L    ;SET TRANSMITTER AND RECEIVER CLOCKS
  101.     MOVE.B    (A6)+,URTCRA.L    ;ENABLE TRANSMITTER AND RECEIVER
  102.  
  103.     MOVEA.L    (SP)+,A6    ;RESTORE A6
  104.     RTS
  105.  
  106. ;68681 INITIALIZATION TABLE:
  107. OPENTBL    DC.B    $00        ;DISABLE ALL INTERRUPTS
  108.     DC.B    $10        ;RESET PTR TO MR1A
  109.     DC.B    $13        ;NO RTS, NO PARITY, 8 DATA BITS
  110.     DC.B    $07        ;1 STOP BIT
  111.     DC.B    $0F        ;SELECT BAUD SET 1 AND
  112.     DC.B    $BB        ; SELECT 9600 KB
  113.     DC.B    $05        ;ENABLE TRANSMITTER AND RECEIVER
  114.  
  115. ;OTHER BAUD RATES MAY BE SET:
  116. ;    RATE    ACR    CSRA
  117. ;    38.4K    $0F    $CC
  118. ;    19.2K    $8F    $CC
  119. ;    9600    $0F    $BB
  120. ;    4800    $0F    $99
  121. ;    2400    $0F    $88
  122. ;    1200    $0F    $66
  123. ;     600    $0F    $55
  124. ;     300    $0F    $44
  125.  
  126. ;-----------------------------------------------------------------------
  127. ;FLUSH OUT ANY CHARACTERS IN THE RECEIVE FIFO
  128. ; THE 68681 WORKS IN MYSTEROUS AND UNDOCUMENTED WAYS. THIS MAKES NO
  129. ; SENSE ACCORDING TO THE 68681 DOCUMENTATION, BUT IT IS WHAT STRIDE
  130. ; USES IN THEIR PROM CODE.
  131. ;
  132. FLUSH    MOVE.L    D0,-(SP)    ;SAVE D0
  133.  
  134.     MOVEQ    #3,D0        ;THE 68681 IS QUADRUPLLY BUFFERED
  135. FL10    BTST    #0,URTSRA.L    ;LOOP UNTIL FIFO IS EMPTY
  136.     BEQ.S    FL20        ;BRANCH IF THERE IS NO CHARACTER
  137.     TST.B    URTDTA.L        ;EAT THE CHARACTER
  138. FL20    DBF    D0,FL10        ;LOOP 4 TIMES
  139.  
  140.     MOVE.L    (SP)+,D0    ;RESTORE D0
  141.     RTS
  142.  
  143. ;-----------------------------------------------------------------------
  144. ;GET A BYTE FROM THE RS-232 PORT AND RETURN IT IN D0
  145. ; "EQ" STATUS IS RETURNED IF A TIMEOUT OCCURS.
  146. ;
  147. BYTEIN    BSET    #3,PPAR11.L    ;MAKE LED RED TO SHOW WE'RE WAITING
  148.     MOVEQ    #3,D0        ;INIT TIMEOUT COUNTER FOR ABOUT 1 SECOND
  149.     SWAP    D0        ;(STRIDE TRICK TO SAVE ONE WHOLE WORD!)
  150. BYIN10    BTST    #0,URT0SRA.L    ;IS THERE A BYTE IN THE TERMINAL RECEIVE
  151.     BEQ.S    BYIN20        ; FIFO?  BRANCH IF NOT
  152.  
  153. ;    JSR    VCHKUSR        ;CHECK FOR CTRL-C, CTRL-S, AND CTRL-P
  154.     MOVE.L    A6,-(SP)    ;SAVE A6
  155.     MOVEA.W    #$20,A6        ;SET "CHKUSR" FUNCTION CODE
  156.     MOVE.B    DEVICE,-(SP)    ;SAVE THE CURRENT DEVICE NUMBER
  157.     MOVE.B    #1,DEVICE    ;SET TO DEVICE # 1
  158.     JSR    VDEVHAN        ;DISPATCH TO "CHKUSR" ROUTINE
  159.     MOVE.B    (SP)+,DEVICE    ;RESTORE DEVICE NUMBER
  160.     MOVEA.L    (SP)+,A6    ;RESTORE A6
  161.  
  162. BYIN20    BTST    #0,URTSRA.L    ;IS THERE A BYTE IN THE RS-232 RECEIVE
  163.     BNE.S    BYIN30        ; FIFO?  BRANCH IF YES -- GO READ BYTE
  164.     SUBQ.L    #1,D0        ;ELSE TICK OFF THE TIMEOUT COUNTER
  165.     BNE.S    BYIN10        ;LOOP BACK IF THERE IS STILL TIME LEFT
  166.     BCLR    #3,PPAR11.L    ;MAKE LED GREEN (AND SETS Z FLAG)
  167.     RTS            ;TIMED OUT -- RETURN WITH "EQ" STATUS
  168.  
  169. BYIN30    BCLR    #3,PPAR11.L    ;MAKE LED GREEN
  170.     CLR.L    D0        ;CLEAR ANY GARBAGE IN THE UPPER BYTES
  171.     MOVE.B    URTDTA.L,D0    ;GET THE BYTE
  172.     ANDI.B    #$FB,CCR    ;MAKE SURE Z FLAG IS CLEAR (NE)
  173.     RTS
  174.  
  175. ;-----------------------------------------------------------------------
  176. ;SEND THE BYTE IN D0 OUT THE RS-232 PORT
  177. BYTEOT    BSET    #3,PPAR11.L    ;MAKE LED RED TO SHOW WE'RE WAITING
  178. BYOT10    BTST    #3,URTSRA.L    ;WAIT FOR TRANSMITTER BUFFER EMPTY
  179.     BEQ.S    BYOT10
  180.     BCLR    #3,PPAR11.L    ;MAKE LED GREEN
  181.     MOVE.B    D0,URTDTA.L    ;OUTPUT DATA
  182.     RTS
  183.  
  184. END    EQU    @        ;ADDRESS WHERE THIS HANDLER ENDS +1
  185.  
  186. ;-----------------------------------------------------------------------
  187. ;HOOK THIS HANDLER INTO THE DEVICE HANDLER TABLE
  188. ;
  189.     ORG    4 *DEVNUM +DEVTBL
  190.     DC.L    SERHAN
  191.  
  192.     END
  193. --------------------------
  194. ;HOOK THIS HAND